#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>

int main()
{
    printf("我是一个进程, pid:%d,ppid:%d\n",getpid(),getppid());
    pid_t id=fork();
    if(id==0)
    {
        while(1)
        {
             printf("子进程, pid:%d,ppid:%d\n",getpid(),getppid());
             sleep(1);
        }        
    }
    else if(id>0)
    {
        //父子进程 如果父进程先退出 子进程的父进程会变成1（操作系统）
        //父进程为1 ---孤儿进程
        //该进程被领养!
        int cnt=5;
        while(cnt--)
        {
             printf("父进程, pid:%d,ppid:%d\n",getpid(),getppid());
             sleep(1);
        }
    }
    return 0;
}



//int main()
//{
//    printf("我是一个进程, pid:%d,ppid:%d\n",getpid(),getppid());
//    pid_t id=fork();
//    if(id==0)
//    {
//        //当循环结束 子进程就会变成z状态---僵尸进程
//        //子进程会一直维持z状态 ，直到父进程回收子进程
//        //子进程的相关资源 尤其是task_struct不能被释放
//        int cnt=5;
//        while(cnt--)
//        {
//             printf("子进程, pid:%d,ppid:%d\n",getpid(),getppid());
//             sleep(1);
//        }        
//    }
//    else if(id>0)
//    {
//        while(1)
//        {
//             printf("父进程, pid:%d,ppid:%d\n",getpid(),getppid());
//             sleep(1);
//        }
//        //回收子进程
//        //...
//    }
//    return 0;
//}


//int main()
//{
//    printf("我是一个进程, pid:%d,ppid:%d\n",getpid(),getppid());
//    pid_t id=fork();
//    if(id==0)
//    {
//        while(1)
//        {
//             printf("子进程, pid:%d,ppid:%d\n",getpid(),getppid());
//             sleep(1);
//        }        
//    }
//    else if(id>0)
//    {
//        while(1)
//        {
//             printf("父进程, pid:%d,ppid:%d\n",getpid(),getppid());
//             sleep(1);
//        }
//    }
//    return 0;
//}
